home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / PASCAL / 0187.ZIP / BLOCK.PAS < prev    next >
Pascal/Delphi Source File  |  1985-01-20  |  9KB  |  488 lines

  1. (*
  2.  * block
  3.  * print out block letters
  4.  *)
  5.  
  6. program block(input,output);
  7.  
  8. const
  9.    length       =  6;     (* length of a letter *)
  10.    length1      =  7;
  11.  
  12. var
  13.    ch   : char;           (* character to enlarge *)
  14.  
  15. (*
  16.  * line
  17.  * draw a line
  18.  *)
  19.  
  20. procedure line;
  21.  
  22. var
  23.    index : 1..length;
  24.  
  25. begin
  26.    for index := 1 to length do
  27.       write(ch);
  28.    writeln
  29. end;  (* line *)
  30.  
  31. (*
  32.  * midline
  33.  * print out a line half way across
  34.  * the screen
  35.  *)
  36.  
  37. procedure midline;
  38.  
  39. var
  40.    i : 1..length;
  41.  
  42. begin
  43.    for i := 1 to length div 2 do
  44.       write(' ');
  45.    writeln(ch)
  46. end;  (* midline *)
  47.  
  48. (*
  49.  * backdiag
  50.  * draw a backward diagonal
  51.  *)
  52.  
  53. procedure backdiag;
  54.  
  55. var
  56.    j,i : 0..length;
  57.  
  58. begin
  59.    for j := 1 to length do
  60.    begin
  61.       for i := 1 to length -j do
  62.          write(' ');
  63.       writeln(ch)
  64.    end
  65. end;  (* backdiag *)
  66.  
  67. (*
  68.  * side
  69.  * draw a single side
  70.  *)
  71.  
  72. procedure side;
  73.  
  74. begin
  75.    writeln(ch)
  76. end; (* side *)
  77.  
  78. (*
  79.  * farside
  80.  * draw a line on the far side
  81.  *)
  82.  
  83. procedure farside;
  84.  
  85. var
  86.    i : 1..length;
  87.  
  88. begin
  89.    for i := 1 to length -1 do
  90.       write(' ');
  91.    writeln(ch)
  92. end;  (* farside *)
  93.  
  94. (*
  95.  * twoside
  96.  * draw a '*    *'
  97.  *)
  98.  
  99. procedure twoside;
  100.  
  101. var
  102.    index : 1..length;
  103.  
  104. begin
  105.    write(ch);
  106.    for index := 2 to length -1 do
  107.       write(' ');
  108.    side
  109. end;  (* twoside *)
  110.  
  111. (*
  112.  * topv
  113.  * draw a V on the top of the letter
  114.  * used for x, y and v
  115.  *)
  116.  
  117. procedure topv;
  118.  
  119. var
  120.    i,j : 0..length;
  121.    d : 0..length1;
  122.  
  123. begin
  124.    for i := 1 to round(length/2) do
  125.    begin
  126.       for j := 1 to i-1 do
  127.          write(' ');
  128.       write(ch);
  129.       if (ch='V') then d := i + 1
  130.       else d := i;
  131.       for j := i to length - d do
  132.          write(' ');
  133.       writeln(ch)
  134.    end
  135. end;  (* topv *)
  136.  
  137. (*
  138.  * botv
  139.  * draw an upside down v, on  the
  140.  * bottom of the screen (used in x)
  141.  *)
  142.  
  143. procedure botv;
  144.  
  145. var
  146.    i,j : 0..length;
  147.  
  148. begin
  149.    for i := round(length/2) downto 1 do
  150.    begin
  151.       for j := i-1 downto 1 do
  152.          write(' ');
  153.       write(ch);
  154.       for j := length - i downto i do
  155.          write(' ');
  156.       writeln(ch)
  157.    end;
  158. end; (* botv *)
  159.  
  160. (*
  161.  * what follows here are the special case
  162.  * letters. They must be drawn by themselves.
  163.  *)
  164.  
  165. (*
  166.  * drawk
  167.  * draw a k
  168.  *)
  169.  
  170. procedure drawk;
  171.  
  172. var
  173.    i,j : 0..length;
  174.  
  175. begin
  176.    for i := 1 to trunc(length / 2) do
  177.    begin
  178.       write(ch);
  179.       for j := i-1 to (length div 2) -1 do
  180.          write(' ');
  181.       writeln(ch)
  182.    end;
  183.    for i := round(length/2) downto 1 do
  184.    begin
  185.       write(ch);
  186.       for j := i-1 to (length div 2) -1 do
  187.          write(' ');
  188.       writeln(ch)
  189.    end
  190. end;  (* drawk *)
  191.  
  192. (*
  193.  * drawmw
  194.  * draw an m or w
  195.  *)
  196.  
  197. procedure drawmw(ism : boolean);
  198.  
  199. var
  200.    i,j : 0..length;
  201.    stop : 0..length;
  202.    by : -1..1;
  203.  
  204. begin
  205.    if ism then
  206.    begin
  207.       by := 1;
  208.       i := 1;
  209.       stop := length div 2
  210.    end
  211.    else
  212.    begin
  213.       by := -1;
  214.       i := length div 2;
  215.       stop := 0
  216.    end;
  217.    twoside;
  218.    while i<>stop do
  219.    begin
  220.       write(ch);
  221.       for j := 2 to i do
  222.          write(' ');
  223.       write(ch);
  224.       if i<>(length div 2) then
  225.       begin
  226.          j := abs(i + i + 2 - length);
  227.          while j>0 do
  228.          begin
  229.             write(' ');
  230.             j := j - 1
  231.          end;
  232.          write(ch);
  233.          for j := 2 to i do
  234.             write(' ');
  235.       end
  236.       else
  237.          for j := 3 to i do
  238.             write(' ');;
  239.       writeln(ch);
  240.       i := i + by
  241.    end;
  242.    twoside;
  243. end; (* drawmw *)
  244.  
  245. (*
  246.  * drawn
  247.  * draw an n
  248.  *)
  249.  
  250. procedure drawn;
  251.  
  252. var
  253.    i,j : 0..length;
  254.  
  255. begin
  256.    for i := 1 to length do
  257.    begin
  258.       write(ch);
  259.       for j := 2 to length -1 do
  260.       begin
  261.          if j = i then
  262.             write(ch)
  263.          else
  264.             write(' ')
  265.       end;
  266.  
  267.       writeln(ch)
  268.    end
  269. end;  (* drawn *)
  270.  
  271. (*
  272.  * draw
  273.  * case statement which calls the
  274.  * needed routines for each character
  275.  *)
  276.  
  277. procedure draw;
  278.  
  279. begin
  280.    writeln;
  281.    if ch in ['A'..'Z'] then
  282.    begin
  283.       case ch of
  284.          'A' : begin
  285.                   line;
  286.                   twoside;
  287.                   twoside;
  288.                   line;
  289.                   twoside;
  290.                   twoside;
  291.                   twoside
  292.                end;
  293.          'B' : begin
  294.                   line;
  295.                   twoside;
  296.                   twoside;
  297.                   line;
  298.                   twoside;
  299.                   twoside;
  300.                   line
  301.                end;
  302.          'C' : begin
  303.                   line;
  304.                   side;
  305.                   side;
  306.                   side;
  307.                   side;
  308.                   side;
  309.                   line
  310.                end;
  311.          'D' : begin
  312.                   line;
  313.                   twoside;
  314.                   twoside;
  315.                   twoside;
  316.                   twoside;
  317.                   twoside;
  318.                   line
  319.                end;
  320.          'E' : begin
  321.                   line;
  322.                   side;
  323.                   side;
  324.                   line;
  325.                   side;
  326.                   side;
  327.                   line
  328.                end;
  329.          'F' : begin
  330.                   line;
  331.                   side;
  332.                   side;
  333.                   line;
  334.                   side;
  335.                   side;
  336.                   side
  337.                end;
  338.          'G' : begin
  339.                   line;
  340.                   side;
  341.                   side;
  342.                   twoside;
  343.                   twoside;
  344.                   twoside;
  345.                   line
  346.                end;
  347.          'H' : begin
  348.                   twoside;
  349.                   twoside;
  350.                   twoside;
  351.                   line;
  352.                   twoside;
  353.                   twoside;
  354.                   twoside
  355.                end;
  356.          'I' : begin
  357.                   line;
  358.                   midline;
  359.                   midline;
  360.                   midline;
  361.                   midline;
  362.                   midline;
  363.                   line
  364.                end;
  365.          'J' : begin
  366.                   farside;
  367.                   farside;
  368.                   farside;
  369.                   farside;
  370.                   farside;
  371.                   farside;
  372.                   line
  373.                end;
  374.          'K' : drawk;
  375.          'L' : begin
  376.                   side;
  377.                   side;
  378.                   side;
  379.                   side;
  380.                   side;
  381.                   side;
  382.                   line;
  383.                end;
  384.          'M' : drawmw(true);
  385.          'N' : drawn;
  386.          'O' : begin
  387.                   line;
  388.                   twoside;
  389.                   twoside;
  390.                   twoside;
  391.                   twoside;
  392.                   twoside;
  393.                   line
  394.                end;
  395.          'P' : begin
  396.                   line;
  397.                   twoside;
  398.                   twoside;
  399.                   line;
  400.                   side;
  401.                   side;
  402.                   side
  403.                end;
  404.          'Q' : begin
  405.                   line;
  406.                   twoside;
  407.                   twoside;
  408.                   twoside;
  409.                   twoside;
  410.                   line;
  411.                   farside
  412.                end;
  413.          'R' : begin
  414.                   line;
  415.                   twoside;
  416.                   twoside;
  417.                   line;
  418.                   twoside;
  419.                   twoside;
  420.                   twoside
  421.                end;
  422.          'S' : begin
  423.                   line;
  424.                   side;
  425.                   side;
  426.                   line;
  427.                   farside;
  428.                   farside;
  429.                   line
  430.                end;
  431.          'T' : begin
  432.                   line;
  433.                   midline;
  434.                   midline;
  435.                   midline;
  436.                   midline;
  437.                   midline;
  438.                   midline
  439.                end;
  440.          'U' : begin
  441.                   twoside;
  442.                   twoside;
  443.                   twoside;
  444.                   twoside;
  445.                   twoside;
  446.                   twoside;
  447.                   line
  448.                end;
  449.          'V' : begin
  450.                   twoside;
  451.                   twoside;
  452.                   twoside;
  453.                   twoside;
  454.                   topv
  455.                end;
  456.          'W' : drawmw(false);
  457.          'X' : begin
  458.                   topv;
  459.                   botv
  460.                end;
  461.          'Y' : begin
  462.                   topv;
  463.                   midline;
  464.                   midline;
  465.                   midline;
  466.                   midline
  467.                end;
  468.          'Z' : begin
  469.                   line;
  470.                   backdiag;
  471.                   line
  472.                end;
  473.       end;
  474.    end;
  475. end; (* draw *)
  476.  
  477. begin
  478.    writeln;
  479.    while not eoln do
  480.    begin
  481.       readln(ch);
  482.       writeln;
  483.       draw;
  484.       writeln
  485.    end
  486. end.  (* block *)
  487.  
  488.